package com.kxs.stu_manager.controller;

import com.kxs.stu_manager.global.User;
import com.kxs.stu_manager.model.UserModel;
import com.kxs.stu_manager.views.StuPage;
import com.kxs.stu_manager.views.UserPage;

import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @ClassName UserController
 * @Description: TODO 用户调度器
 * @Author: 2119475835@qq.com
 * @Date: 2023/1/17
 */
public class UserController {
    private UserModel um = new UserModel();
    private StuController sc = new StuController();

    /**
     * 用户登录或注册的调度器
     *
     * @param num 用户选择的操作数
     * @return 返回注册或登录的用户
     */
    public User loginAction(int num) throws SQLException {
        User user = null;
        switch (num) {
            case 1: // 登录
                user = um.doLogin(UserPage.getLoginUser());
                if (null == user) {
                    UserPage.failed("登陆失败!~");
                }
                break;
            case 2: // 注册
                user = um.doReg(UserPage.getRegUser());
                if (null == user) {
                    UserPage.failed("注册失败!~");
                }
                break;
            case 0: // 退出
                UserPage.bye();
                System.exit(-1);
                break;
        }
        return user;
    }

    /**
     * 选择管理学生或是管理用户的调度器
     *
     * @param num 用户输入的操作数
     * @param com 用户权限
     */
    public void userOrStuAction(int num, String com) throws SQLException {
        switch (num) {
            case 1: // 管理用户信息
                if (com.equals("2")) {
                    UserPage.failed("用户权限不足！~");
                    break;
                }
                while (userAction(UserPage.userMainPage(com), com)) ;
                break;
            case 2: // 管理学生信息
                while (sc.action(StuPage.stuMainPage(com), com));
                break;
            case 0: // 退出系统
                UserPage.bye();
                System.exit(-1);
                break;
        }
    }

    /**
     * 管理用户的调度器
     *
     * @param num 用户输入的操作数
     */
    private boolean userAction(int num, String com) throws SQLException {
        switch (num) {
            case 1: // 查找用户
                // 查询用户的二级菜单
                while (secSelUserAction(UserPage.secSelUserPage())) ;
                break;
            case 2: // 修改用户
                // 进行权限限制
                if(com.equals("1")){
                    UserPage.failed("用户权限不足！~");
                    break;
                }
                // 获取要修改的用户信息
                ArrayList<User> userList = um.getUserInfoByName(UserPage.getUserName());
                if (userList.isEmpty()) {
                    UserPage.failed("用户信息不存在！~");
                } else {
                    User user = UserPage.editUserPage(userList.get(0));
                    um.updateUser(user);
                }
                break;
            case 3: // 删除用户
                if(com.equals("1")){
                    UserPage.failed("用户权限不足！~");
                    break;
                }
                // 删除的二级菜单
                secDelUserAction(UserPage.secDelUserPage());
                break;
            case 0: // 返回上一级
                switch (UserPage.overPage()) {
                    case "n":
                    case "N":
                        return true;
                    case "y":
                    case "Y":
                        return false;
                }
        }
        return true;
    }

    /**
     * 删除的二级菜单
     *
     * @param num 用户的操作数
     */
    private void secDelUserAction(int num) throws SQLException {
        switch (num) {
            case 1: // 删除全部
                // 展示全部学生信息
                if(UserPage.showUser(um.selAllUser())){
                    UserPage.failed("结束删除");
                    break;
                }else {
                    // 确认是否删除的警告！！
                    if(UserPage.isDelAll()){
                        um.doDelAllUser();
                    }
                }
                break;
            case 2: // 按姓名删除
                // 获取要删除的用户
                ArrayList<User> userList1 = um.getUserInfoByName(UserPage.getUserName());
                if (userList1.isEmpty()){
                    UserPage.failed("用户信息不存在！~");
                }else {
                    // 展示用户信息
                    UserPage.showUser(userList1);
                    // 确认是否删除
                    if(UserPage.isDel()){
                        um.doDelUser(userList1.get(0).getUserName());
                    }
                }
                break;
            case 0:
                break;
        }
    }

    /**
     * 查询用户信息的二级菜单
     *
     * @param num 用户选择的操作数
     * @throws SQLException
     */
    private boolean secSelUserAction(int num) throws SQLException {
        switch (num) {
            case 1: // 查询全部
                UserPage.showUser(um.selAllUser());
                break;
            case 2: // 按ID查询
                UserPage.showUser(um.getUserById(UserPage.getUserId()));
                break;
            case 3: // 按姓名查询
                UserPage.showUser(um.getUserInfoByName(UserPage.getUserName()));
                break;
            case 4:// 按权限查询
                UserPage.showUser(um.getUserByCompetence(UserPage.getUserCompetence()));
                break;
            case 0:// 结束查询
                return false;
        }
        return true;
    }
}
